package com.example.exam.utils;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

import java.io.Serializable;

/**
 * @author zhozixiong
 * @date 2023/03/02
 *
 * 统一返回值
 */
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class R<E> implements Serializable {

    /**
     * 响应信息
     */
    private String message;

    /**
     * 响应数据
     */
    private E data;


    private R(String message, E data) {
        this.message = message;
        this.data = data;
    }

    /**
     * 默认 [成功] 响应
     */
    public static R ok() {
        return new R<>("ok", null);
    }

    /**
     * 携带响应数据信息的 [成功] 响应
     */
    public static <E> R<E> ok(E data) {
        return new R<>("ok", data);
    }

    /**
     * 默认 [失败] 响应
     */
    public static R fail() {
        return new R<>("fail", null);
    }

    /**
     * 携带错误信息的 [失败] 响应
     */
    public static <E> R<E> fail(E data) {
        return new R<>("fail", data);
    }
}
